#include <iostream>
using namespace std;

// 引用做函数的返回值
// 1、不要返回局部变量的引用
int &test1()
{
    int a = 99; // 局部变量存放在栈区
    return a;
}

// 2、函数的调用可以作为左值
int &test2()
{
    static int a = 109; // a存储在全局区，整个程序结束后，由系统自动释放

    return a;
}

double &returnmax(double &x, double &y)
{
    return (x > y) ? x : y;
}

int main()
{
    int &ret = test1();
    cout << "ret = " << ret << endl; // 结果错误，因为a的内存已释放

    int &ret2 = test2();
    cout << "ret2 = " << ret2 << endl;

    test2() = 999; // 函数（返回的是引用）可以作为左值，相当于给a的别名赋值
    cout << "ret2 = " << ret2 << endl;

    cout << "=======================" << endl;
    double a = 2.5, b = 5.6;
    cout << returnmax(a, b) << endl;
    returnmax(a, b) = 3.3; // 将返回回来的b 修改了
    cout << b << endl;

    return 0;
}